import Vue from "vue";
import Store from '@/store'
import { Message, MessageBox, Loading } from "element-ui";
import moment from "moment";
let loadingInstance = "";
const EventBus = new Vue();
export const Util = {
  /**
   * 简单alert
   * title 标题
   * message 内容
   * className 自定义class
   * showCancelButton 是否展示取消按钮
   * confirmButtonText 确认按钮文案
   * cancelButtonText 取消按钮文案
   * confirmButtonColor 确认按钮颜色
   * cancelButtonColor 取消按钮颜色
   * type: success / info / warning / error
   */
  msg: function (options) {
    MessageBox({
      title: options.title || "",
      type: options.type || "error",
      message: options.message || "",
      className: options.className || "",
      showCancelButton: options.showCancelButton || false,
      confirmButtonText: options.confirmButtonText || "确认",
      cancelButtonText: options.cancelButtonText || "取消",
      confirmButtonColor: options.confirmButtonColor || "#1989fa",
      cancelButtonColor: options.cancelButtonColor || "#000",
      dangerouslyUseHTMLString: true,
      center: options.center || false,
      callback: function (action, done) {
        if (action == "confirm") {
          if (options.success) {
            options.success(done);
          }
        } else {
          if (options.cancel) {
            options.cancel(done);
          }
        }
      }
    });

    /* Vue.$vux.alert.show({
      title: options.title||'',
      content: options.message||'',
      onShow() {
        options.onShow?(options.onShow)():'';
      },
      onHide() {
        options.onHide?(options.onHide)():'';
      }
    }) */
  },

  /**
   * 提示框
   */
  Info: function (options) {
    Message({
      message: options.message || "提示",
      type: options.type || "error",
      duration: options.time || 2000,
      onClose: options.onClose || ""
    });
  },

  /**
   * 轻提示
   */
  Tips: function (options) {
    Message({
      message: options.message || "提示",
      duration: options.duration || 3000,
      type: options.type || "text",
      icon: options.icon || ""
    });
  },

  /**
   * loading
   */
  loading: function (message) {
    loadingInstance = Loading.service({
      text: message || "加载中..."
    });
  },

  /**
   * 关闭loading
   */
  closeLoading: function () {
    loadingInstance.close();
  },

  /**
   * 校验手机号码格式
   */
  checkPhone: function (mobile) {
    let myreg = /^(13[0-9]|15[0-9]|16[0-9]|17[0-9]|18[0-9]|19[0-9]|14[0-9])[0-9]{8}$/;
    return myreg.test(mobile);
  },

  /**
   * 校验固定电话
   */
  validationTel: function (tel) {
    let reg = /^0[\d]{2,3}-[\d]{7,8}$/;
    return reg.test(tel);
  },

  /**
   * 是否特殊字符
   */
  isSpecialLetter: function (str) {
    let reg = new RegExp(
      "[`~!@#$^&*=|{}':;',\\[\\]<>?~！@#￥……&*——|{}【】‘；：”“'。，、？ ]"
    );
    return reg.test(str);
  },

  /**
   * 获取当前时间
   */
  getCurrentDate: function () {
    let time = new Date();
    let y = time.getFullYear();
    let m = time.getMonth() + 1;
    let d = time.getDate();

    return {
      date: y + "/" + m + "/" + d
    };
  },

  /**
   * 获取浏览器参数
   */
  getUrlParams: function (name) {
    let vars = [],
      hash;
    let oParams = {};
    let hashes = window.location.href
      .slice(window.location.href.indexOf("?") + 1)
      .split("&");
    for (let i = 0; i < hashes.length; i++) {
      hash = hashes[i].split("=");
      vars.push(hash[0]);
      oParams[hash[0]] = hash[1];
    }
    console.log(vars);
    if (name) {
      return oParams[name];
    } else {
      return oParams;
    }
  },

  /**
   * 根据当前时间，计算往后30天的日期
   */
  getAfterDate: function (day) {
    let date1 = new Date();
    let date2 = new Date(date1);
    let time = 30;
    if (day) {
      time = day;
    }
    date2.setDate(date1.getDate() + time);

    let _date =
      date2.getFullYear() +
      "-" +
      (date2.getMonth() + 1) +
      "-" +
      date2.getDate();

    return {
      date: _date,
      year: date2.getFullYear(),
      month: date2.getMonth() + 1,
      day: date2.getDate()
    };
  },

  /**
   * 日期格式转换
   */
  dateFormate: function (str, type) {
    let txt = "YYYY-MM-DD";
    if (!str) {
      return "";
    }
    if (type) {
      txt = type;
    }
    const m = moment(str).format(txt);
    return m;
  },

  /**
   * 字段截取
   */
  cutStr: function (str, num) {
    if (!str) {
      return "";
    }

    let m = 10;
    let n = str;
    if (num) {
      m = num;
    }
    if (str.length > m) {
      n = str.slice(0, m) + "...";
    }

    return n;
  },

  // 传递消息
  broadcast: function (msg, data) {
    EventBus.$emit(msg, data);
  },

  // 接收消息
  received: function (msg, callBack) {
    EventBus.$off(msg);
    EventBus.$on(msg, function (row) {
      callBack(row);
    });
  },

  /**
   * 深克隆 所有原型链上的对象和属性
   * 例: const bar=deepClone(foo)
   * console.log(bar===foo) false
   * @param {*} obj
   */
  deepClone: function (obj) {
    // Handle the 3 simple types, and null or undefined or function
    if (obj == null || typeof obj !== "object") return obj;
    // Handle Date
    if (obj instanceof Date) {
      const copy = new Date();
      copy.setTime(obj.getTime());
      return copy;
    }
    // Handle Array or Object
    if ((obj instanceof Array) | (obj instanceof Object)) {
      const copy = obj instanceof Array ? [] : {};
      for (var attr in obj) {
        if (obj.hasOwnProperty(attr)) {
          copy[attr] = Util.deepClone(obj[attr]);
        }
      }
      return copy;
    }
    throw new Error("Unable to clone obj! Its type isn't supported.");
  },

  // 取数据
  getStorage: function (key) {
    let o = sessionStorage.getItem(key);
    let m = o ? JSON.parse(o) : {};
    return m;
  }
};

export const showFollowProcess = e => {
  if (!e) {
    return ''
  }
  let list = Store.state.common.followStatus;
  let o = list.find(k => k.status == e);
  if (o) {
    return o.desc
  } else {
    return ''
  }
}

export const getTagList = (str, id) => {
  if (!str) {
    return []
  }
  let type = ',';
  if (id) {
    type = id;
  }
  let m = str.split(type);
  return m;
}

export const showModal = Util.msg;
export const showToast = Util.Info;
export const broadcast = Util.broadcast;
export const received = Util.received;
export const deepClone = Util.deepClone;
export const getStorage = Util.getStorage;
